home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / DiceSource / src / dme / wildcmp.a < prev   
Text File  |  1991-06-19  |  2KB  |  115 lines

  1.  
  2.         section text,code
  3.  
  4.         ;WILDCMP(wild:D0, name:D1)
  5.         ;
  6.         ;   Handles * and ?
  7.         ;
  8.         ;result:  D0, 0 = no match, 1 = match
  9.         ;
  10.         ;auto:
  11.         ;   D2    bi
  12.         ;   A2    wildcard string
  13.         ;   A3    name     string
  14.         ;   A4    back-array (of size MAXB * 2 * 4)
  15. ;Prototype int WildCmp(char *, char *);
  16.  
  17.  
  18. MAXB        EQU    8
  19. MAXB28        EQU    128    /*  MAXB*2*8    */
  20.  
  21.         xdef    _WildCmp
  22.         xdef    @WildCmp
  23.  
  24. @WildCmp:    move.l    A0,D0
  25.         move.l    A1,D1
  26.         bra    x10
  27.  
  28. _WildCmp:    movem.l 4(sp),D0/D1
  29. x10        movem.l D2/A2-A4,-(sp)
  30.         move.l    D0,A2
  31.         move.l    D1,A3
  32.         sub.l    #MAXB28,sp
  33.         move.l    sp,A4
  34.  
  35.         moveq.l #0,D2
  36.  
  37. xwcloop     moveq.l #1,D0
  38.         move.b    (A2),D1
  39.         bne    xw1
  40.         tst.b    (A3)
  41.         beq    xwcdone
  42.  
  43. xw1        cmp.b    #$2A,D1     ; '*'
  44.         bne    xw10
  45.         cmp.w    #MAXB,D2
  46.         bne    xw2
  47.         moveq.l #-1,D0        ; error
  48.         bra    xwcdone
  49. xw2        move.w    D2,D0        ; back[bi][0] = w  i.e. back+bi*8
  50.         asl.w    #3,D0        ; back[bi][1] = n
  51.         move.l    A2,0(A4,D0.w)
  52.         move.l    A3,4(A4,D0.w)
  53.         addq.w    #1,D2
  54.         addq.l    #1,A2
  55.         bra    xwcloop
  56.  
  57. xwgoback    subq.w    #1,D2
  58.         bmi    xw5
  59.         move.w    D2,D0
  60.         asl.w    #3,D0
  61.         move.l    4(A4,D0.w),A0
  62.         tst.b    (A0)
  63.         beq    xwgoback
  64. xw5        tst.w    D2
  65.         bmi    xwcret0
  66.         move.w    D2,D0
  67.         asl.w    #3,D0
  68.         move.l    0(A4,D0.w),A2
  69.         addq.l    #1,A2
  70.         add.l    #1,4(A4,D0.w)
  71.         move.l    4(A4,D0.w),A3
  72.         addq.l    #1,D2
  73.         bra    xwcloop
  74.  
  75. xw10        cmp.b    #$3F,D1     ; '?'
  76.         bne    xw20
  77.         tst.b    (A3)
  78.         bne    xwcbreak
  79.         tst.w    D2
  80.         bne    xwgoback
  81.         bra    xwcret0
  82.  
  83. xw20        move.b    (A3),D0
  84.         cmp.b    #$51,D0
  85.         bcs    xw21
  86.         cmp.b    #$5A,D0
  87.         bhi    xw21
  88.         or.b    #$20,D0
  89. xw21        move.b    (A2),D1
  90.         cmp.b    #$41,D1
  91.         bcs    xw22
  92.         cmp.b    #$5A,D1
  93.         bhi    xw22
  94.         or.b    #$20,D1
  95. xw22        cmp.b    D0,D1
  96.         beq    xwcbreak
  97.         tst.w    D2
  98.         bne    xwgoback
  99.         bra    xwcret0
  100.  
  101. xwcbreak    tst.b    (A2)+
  102.         bne    xwcb1
  103.         subq.l    #1,A2
  104. xwcb1        tst.b    (A3)+
  105.         bne    xwcb2
  106.         subq.l    #1,A3
  107. xwcb2        bra    xwcloop
  108.  
  109. xwcret0     moveq.l #0,D0
  110. xwcdone     add.l    #MAXB28,sp
  111.         movem.l (sp)+,D2/A2-A4
  112.         rts
  113.  
  114.         END
  115.